﻿#include<iostream>
#include<ctime>
using namespace std;
const int N = 1e5 + 10;
int tmp[N];
int arr[N];
int n;
//void insert_sort()
//{
//	for (int i = 2; i <= n; i++)
//	{
//		int j = i-1;
//		int tmp = arr[i];
//		while (j >= 1 && arr[j] > tmp)
//		{
//			
//				arr[j + 1] = arr[j];
//					j--;
//			
//		}
//		arr[++j] = tmp;
//	}
//}
//void selection_sort()
//{
//	for (int i = 1; i < n; i++)
//	{
//		int pos = i;
//		for (int j = i+1; j <= n; j++)
//		{
//			if (arr[j] < arr[pos])
//			{
//				pos = j;
//			}
//		}
//		swap(arr[i], arr[pos]);
//	}
//}

//void bubble_sort()
//{
//	for (int i = n; i > 1; i--)
//	{
//		int flag= 0;
//		for (int j = 1; j < i; j++)
//		{
//			if (arr[j]>arr[j+1])
//			{
//				swap(arr[j],arr[j+1]);
//				flag = 1;
//			}
//		}
//		if (flag==0)
//		{
//			return;
//		}
//	}
//}
//void down(int parent,int len)
//{
//	int child = parent * 2;
//	while(child<=len)
//	{
//		if (arr[child]<=arr[child + 1] && child+1<=len)
//		{
//			child++;
//		}
//		if (arr[child] <=arr[parent])
//		{
//			return;
//		}
//		swap(arr[parent], arr[child]);
//		parent = child;
//		child = parent * 2;
//	}
//
//}
//
//void heap_sort()
//{
//	//1.建堆
//	for (int i = n / 2; i >= 1; i--)
//	{
//		down(i, n);
//	}
//	//2.排序
//	for (int i = n; i > 1; i--)
//	{
//		swap(arr[1], arr[i]);
//		down(1, i-1);
//	}
//}
// 优化⼀：随机选择基准元素
//int get_random(int left, int right)
//{
//	return arr[rand() % (right - left + 1) + left];
//}
//
//void quick_sort(int left, int right)
//{
//	if (left >= right)
//	{
//		return;
//	}
//	//1.得到基准值
//	int p = get_random(left, right);
//	//2.排序
//	int l = left - 1, i = left, r = right+1;
//	while (i < r)
//	{
//		if (arr[i] < p)
//		{
//			swap(arr[++l], arr[i]);
//			i++;
//		}
//		else if (arr[i] == p)
//		{
//			i++;
//		}
//		else
//		{
//			swap(arr[--r],arr[i]);
//		}
//	}
//	quick_sort(left, l);
//	quick_sort(r, right);
//}
void merge_sort(int left, int right)
{
	if (left >= right)
	{
		return;
	}
	int mid = (left + right) >> 1;
	merge_sort(left, mid);
	merge_sort(mid+1, right);
	int cur1 = left, cur2 = mid + 1, i = left;
	while (cur1 <= mid && cur2 <= right)
	{
		if (arr[cur1] < arr[cur2])
		{
			tmp[i++] = arr[cur1++];
		}
		else
		{
			tmp[i++] = arr[cur2++];
		}
	}
	while (cur1 <= mid)
	{
		tmp[i++] = arr[cur1++];
	}
	while (cur2 <= right)
	{
		tmp[i++] = arr[cur2++];
	}
	for (int j = left; j <= right; j++)
	{
		arr[j] = tmp[j];
	}
}


int main()
{
	srand(time(0));
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> arr[i];
	}
	//insert_sort();
	//selection_sort();
	/*bubble_sort();*/
	/*heap_sort();*/
	/*quick_sort(1, n);*/
	merge_sort(1, n);
	for (int i = 1; i <= n; i++)
	{
		cout << arr[i];
	}
	return 0;
}
